在 Linux/Unix 系統中,硬連結( Hard Link ) 是一種給檔案取「別名」的方法。它讓多個檔名指向同一個檔案的資料( inode ),就算原本的檔名被刪除了,其他硬連結依然可以存取檔案內容。
在 Linux/Unix 系統中,檔案並不是直接由檔名指向內容。
事實上,檔名只是「標籤」,真正存放檔案資訊的地方叫做 inode( index node,索引節點)。
每個檔案在檔案系統中都會有一個 唯一的 inode 編號,它負責存放檔案的「中繼資料( metadata )」,也就是除了檔名以外的所有資訊。
硬連結就是讓不同的檔名,指向同一個 inode。
檔名是存在目錄( directory )裡,目錄會建立一個檔名 → inode 編號的對應表。
也就是說:
在 Linux 終端機輸入:
ls -li
輸出範例:
123456 -rw-r--r-- 2 user user  12 Sep 17 23:10 file1.txt
123456 -rw-r--r-- 2 user user  12 Sep 17 23:10 file2.txt
123456 → 這就是 inode 編號2 → 硬連結數量(有兩個檔名指向這個 inode)file1.txt 和 file2.txt 雖然有不同的名字,但它們的 inode 編號一樣,所以它們其實是同一個檔案。每個檔案系統(filesystem)在建立時就會分配固定數量的 inode。
即使磁碟還有空間,如果 inode 用完了,也無法再建立新檔案。
可以用以下指令查看 inode 使用情況:
df -i
輸出範例:
Filesystem     Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1    6553600 1200000 5353600   18% /
使用 ln 指令來建立硬連結
ln [原始檔案名稱] [新檔案名稱]
echo "Hello World" > file1.txt
ln file1.txt file2.txt
file1.txt 與 file2.txt 都指向同一個 inode。file1.txt 與 file2.txt 都會輸出 Hello World ,不過兩者是獨立的檔案。file1.txt,file2.txt 仍然能使用。| 特性 | 軟連結 (symlink) | 硬連結 (hard link) | 
|---|---|---|
| 指向 | 檔案路徑 | 檔案內容 (inode) | 
| 類似 | Windows 捷徑 | 同一份檔案的另一個檔名 | 
| 是否可跨檔案系統 | 可以 | 不行 | 
| 原始檔刪除後 | 連結失效 | 另一個仍可用 | 
| 建立在目錄上 | 可以 | 不行 | 
| 使用場景 | 建立捷徑、快速存取 | 檔案多個名稱、確保資料一致性 | 
ls -l
-rw-r--r--  1 user user   12 Sep 17 file.txt
lrwxrwxrwx  1 user user    8 Sep 17 softlink.txt -> file.txt
l 開頭代表這是連結檔softlink.txt 指向 file.txt
ls -l
-rw-r--r--  2 user user   12 Sep 17 file.txt
-rw-r--r--  2 user user   12 Sep 17 hardlink.txt
rw-r--r-- → 檔案的權限2 → 硬連結數(這個檔案有多少個檔名指向同一個 inode)ls -l 內容說明補充-rw-r--r--  2 user user  4096 Sep 17 22:30 hello.txt
user → 檔案的擁有者(owner)
user → 檔案的群組(group)
4096 → 檔案大小(bytes)Sep 17 22:30 → 修改時間hello.txt → 檔案名稱ls -l
ln(硬連結)、ln -s(軟連結)